
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextPane;

/*
 * Classe responsavel pela comunicação dos processos
 */
public class ComunicationUniCast implements Runnable{

    JTextPane text;
    private final int porta;
    private final String endereco;

    Socket socket = null;
    DataInputStream dataInputStream = null;
    DataOutputStream dataOutputStream = null;

    ComunicationUniCast(JTextPane text, int porta, String endereco) {
        this.text = text;
        this.porta = porta;
        this.endereco = endereco;
    }

    public void escreve(String s) {
        text.setText( (!(text.getText().isEmpty()) ? text.getText() : "\n")+s + "\n" );
    }

    //enviar o pacote
    public void envia(String s){
        try {
            dataOutputStream.writeUTF(s);
        } catch (IOException ex) {
            escreve("Problema em enviar mensagem comunication.");
        }
    }

    //receber o pacote
    public String recebe(){
        String aux;
        try {
            aux =  dataInputStream.readUTF();
        } catch (IOException ex) {
            escreve("Problema em receber o Pacote");
            aux = null;
        }
        return aux;
    }

    public void iniciaComunicacao(){
        try {
            socket = new Socket(endereco, porta);
            escreve("Se conectando a:"+endereco+":"+porta);
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
	    dataInputStream  = new DataInputStream(socket.getInputStream());
        } catch (IOException e) {

            escreve("Problema de IO: "+endereco+":"+porta);
        }

    }

    public void run(){
        iniciaComunicacao();
    }
}